package cursopoo

def o = new SubClase()
def subsub = new SubSubClase()

o.mostrarValores()
println 'Dump: ' + o.dump()

subsub.mostrarValores()
println 'Dump: ' + subsub.dump()

// -----------------------------------------------------------------
class Base {
    protected def variableDeInstancia = 10
}

class SubClase extends Base {
    // La sub clase puede definir variables de instancia con el mismo nombre
    // lamentablemente esto lo que hace es "ocultar" la variable en la super clase
    def variableDeInstancia = 20

    def mostrarValores() {
        // ATENCION: ver que this.variableDeInstancia no hace un "method lookup"
        println 'Definida en SubClase: ' + this.variableDeInstancia
        println 'Definida en Base: ' + super.variableDeInstancia
    }
}

class SubSubClase extends SubClase {
    def variableDeInstancia = 40
    def mostrarValores() {
        super.mostrarValores()
        // NO  HAY FORMA DE acceder directamente al valor de variableDeInstancia
        // en Base
        println 'Definida en SubSubClase: ' + this.variableDeInstancia
        println 'Valor de super: ' + super.variableDeInstancia
    }
}

